# vim: filetype=sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.

. $STF_SUITE/include/libtest.kshlib

#
# A function that verifies sort order. It takes as input
# a command, which gets executed. We then iterate over the results
# comparing that the sort order passed in via the list
#
function verify_sort { # command list name

	# now verify we've sorted by creation date:
	typeset CMD=$1
	typeset list=$2
	typeset name=$3

	typeset -i RET=0 
	typeset -i index=1

	# run the command to verify that it works
	log_must eval "$CMD > /dev/null"

	# Now check the sort order
	for dataset in $( $CMD )
	do
		ACTUAL=$(basename $dataset)
		if [ "$dataset" != "$TESTPOOL/$TESTFS" ]
		then
			EXPECTED=$($ECHO $list | $AWK "{print \$$index}")
		   	if [ "$ACTUAL" != "$EXPECTED" ]
			then
		      		log_note "WARNING:" \
					"'$ACTUAL' does not equal '$EXPECTED'"
				log_fail "ERROR: Sort by $name fails."
			fi
   
			((index = index + 1))
		fi
	done

	# finally check to see if we have the expected number of elements
	if [ $index -ne $($ECHO $list | $AWK '{print split($0,arr)+1}') ]
	then
		log_fail "Warning: " \
			"unexpected number of filesystems found in list output!"
	fi
}

# A function that verifies reverse sort order. It takes as input
# a command, which gets executed. We then iterate over the results
# comparing that the sort order passed in via the list
#
function verify_reverse_sort { # command list name

	typeset CMD=$1
	typeset list=$2
	typeset name=$3
 
	# set our index to the be number of elements in the list
	typeset -i index=$($ECHO $list | $AWK '{print split($0,arr)}')

	log_note "Checking reverse sort by '$name'," \
		"expecting the reverse of '$list'"
	log_must eval "$CMD > /dev/null"
	
	for dataset in $( $CMD )
	do
		ACTUAL=$(basename $dataset)
		if [ "$dataset" != "$TESTPOOL/$TESTFS" ]
		then
			EXPECTED=$($ECHO $list | $AWK "{print \$$index}")
	   		if [ "$ACTUAL" != "$EXPECTED" ]
			then
		      		log_note "Warning:" \
					"'$ACTUAL' does not equal to" \
					"the reverse of '$EXPECTED'"
				log_fail "ERROR: Reverse sort by '$name' fails."
			fi
   
			((index = index - 1))
		fi
	done
 
 	# finally check to see if we have the expected number of elements
	if [ $index -ne 0 ]
	then
		log_fail "Warning: " \
			"unexpected number of filesystems found in list output!"
	fi
}
